package com.atuigu.test;

import com.atguigu.bean.Car;
import com.atguigu.bean.Person;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class IOCTest2 {
    //加载配置文件
    private ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc2.xml");

    /**
     * 实验08：为引用类型、集合类型赋值。
     *      【使用null值】、【特殊符号<>】、引用类型赋值
     *
     *      提示！
     *          不赋值：引用类型：默认就是null值
     *                 基本数据类型：各自的默认值
     */
    @Test
    public void test08_Null_specialSymbol_ReferenceType(){
        Person bean = ioc.getBean("person08", Person.class);
        System.out.println(bean);

    }

    /**
     * 【给集合赋值】
     *      list、map、property
     */
    @Test
    public void test08_List_Map_Property(){
        Person bean = ioc.getBean("person09", Person.class);
        System.out.println(bean);

    }


    /**
     * 级联赋值：
     *      级联属性：属性的属性
     *      此时的car是引用，【ref=car01】
     *           所以，此处修改价格为90000，car01也会被改为9000
     */
    @Test
    public void test08_cascade(){
        Car car01 = ioc.getBean("car01", Car.class);
        System.out.println(car01);

        Person bean = ioc.getBean("person10", Person.class);
        System.out.println(bean);

    }

    /**
     * 实验09：通过继承，实现bean配置信息的重用
     */
    @Test
    public void test09(){
        // person11是抽象的,不能被获取，会报错！
        Person person11 = ioc.getBean("person11", Person.class);
        System.out.println(person11);

        Person person12 = ioc.getBean("person12", Person.class);
        System.out.println(person12);

    }
}
